package com.ns.core.current.mybatis;

import com.ns.core.utils.jwt.SystemUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.logging.Log;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 自定义mybatis日志层实现，优化mybatis日志输出，主要优化以下部分：
 * <p> 1、删除无用日志信息
 * <p> 2、SQL高亮显示
 *
 * @author lw
 */
@Slf4j
public class MybatisStdOutImpl implements Log {
    private static final Logger LOGGER = LoggerFactory.getLogger(MybatisStdOutImpl.class);

    public MybatisStdOutImpl(String clazz) {
    }

    @Override
    public boolean isDebugEnabled() {
        return true;
    }

    @Override
    public boolean isTraceEnabled() {
        return true;
    }

    @Override
    public void error(String s, Throwable e) {
        LOGGER.error(s);
    }

    @Override
    public void error(String s) {
        LOGGER.error(s);
    }

    /**
     * MyBatis动作 打印
     * 执行Sql与参数 打印
     */
    @Override
    public void debug(String s) {
        // 以下日志，不再打印
        if (s.startsWith("Creating") || s.startsWith("SqlSession") || s.startsWith("Cache") || s.startsWith("JDBC") || s.startsWith("Closing")) {
            return;
        }
        // 如果是sql语句，则: 蓝色、加粗、下划线
        if (SystemUtil.config != null && SystemUtil.config.isColorSql()) {
            s = "\033[34;1;4m" + s + "\033[0m";
        }
        if (SystemUtil.config != null && SystemUtil.config.isLogToFile()) {
            LOGGER.debug(s);
        }
    }

    /**
     * Sql执行结果，打印
     */
    @Override
    public void trace(String s) {
        if (SystemUtil.config.isLogToFile()) {
            LOGGER.trace(s);
        }
    }

    @Override
    public void warn(String s) {
        if (SystemUtil.config.isLogToFile()) {
            LOGGER.warn(s);
        }
    }
}
